#ifndef _RENZO_OBJECT_
#define _RENZO_OBJECT_

#include "RenzoMustHave.h"
#include "RenzoResource.h"

namespace Renzo
{
/**
A typical implemenation of a new resource added to the system. Every new resource class should follow Object's implementation pattern. Specifically,
1. Make constructor/destructor protected so nobody can create or delete objects using new/new[]/delete/delete[] operator.
2. The constructor parameters should be empty. All initialization parameters should be passed in via initialize() method.
3. Make the ResourceManager friend of the new resource class.
4. Define a protected, static method static Object* create() { return new <resource class>; } to let ResourceManager create new objects by calling this creator function.
*/
class RENZODERER_API Object : public Resource
{
protected:	
	Object(void);	
	virtual ~Object(void);

	static Object* create();
public:
	virtual void initialize() {}	
	virtual void update(int delta);
	virtual void render();
	virtual void transform(const Matrix4& mat);
protected:
	friend class ResourceManager;
};
}

#endif